package io.gitee.xyuesheng.day05;

import org.junit.Test;

import java.util.*;

public class TestWordCount {
    private static final String DATA = "beyond your current ability, " +
            "trying it analyzing it It your of Of of while and after ";

    @Test
    public void testCountWord() {
        Map<String, Integer> map = countWords(DATA);

        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + "/" + entry.getValue());
        }
    }

    /**
     * 给定一个英文字符串，统计里面每个单词的个数（不区分大小写）
     *
     * @param sentence
     * @return
     */
    public Map<String, Integer> countWords(String sentence) {
        //字符串切割=》String[]
        String[] strings = sentence.split("[,. ]");
        /**
         * String[] strings=sentence.split("[,. ]");
         * 一定要有中括号[]，点后面要有空格
         */
        //遍历数组
        //当前字符串是否已经有统计数据了（map里面已经有对应的key）
        //取出计数，+1
        //如果没有当前字符串的计数
        //将计数设成1，字符串放入map  map.put(string,1)

        //TreeMap可以保证元素的顺序
        //是根据key的comparable()方法的比较结果来排序
//        Map<String,Integer> map=new HashMap<>();
        Map<String, Integer> map = new TreeMap<>();

        //逆序
//        Map<String,Integer> map=new TreeMap<>(new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                return -o1.compareTo(o2);
//            }
//        });


        for (String s : strings) {
            String lowcase = s.toLowerCase();
            if (map.containsKey(lowcase)) {
//                int count=map.get(s);
//                count++;
//                map.put(s,count);

                map.put(lowcase, map.get(lowcase) + 1);
            } else {
                map.put(lowcase, 1);
                //改多个地方，选中s，refactor,rename,第三个
                //shift+f6
            }
        }
        return map;
    }

    /**
     * 给定一个英文字符串，判断里面有几个不同的单词（不区分大小写）
     *
     * @param s
     * @return
     */
    public static int count(String s) {
        //先把字符串分割（空格、,、.）
        String[] s1 = DATA.split("[ ,.]");
        //[]在正则表达式里表示多个中的一个
        Set<String> set = new HashSet<>();
        for (String e : s1) {
            //添加到集合里面去的时候，转成小写
            set.add(e.toLowerCase());
            //自动去重(判断e是否和集合里面已有的元素符合equals关系)
        }
        System.out.println("有" + set.size() + "个不重复的");
        return set.size();
    }

    //测试分割
    @Test
    public void test() {
        String[] s = DATA.split("[ ,.]");
        for (String e : s) {
            if (e.length() == 0) {

            }
            System.out.println(e);
        }
    }

}
